#include "bsp_gpio.h"
#include "at32f403a_407.h"

#include "cbb_init.h"

static void bsp_blue_led_init(void){

    crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);

    gpio_init_type GPIO_InitStructure;
    GPIO_InitStructure.gpio_pins = GPIO_PINS_15;
    GPIO_InitStructure.gpio_mode = GPIO_MODE_OUTPUT;
    GPIO_InitStructure.gpio_pull = GPIO_PULL_UP;
    GPIO_InitStructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    GPIO_InitStructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;

    gpio_init(GPIOC, &GPIO_InitStructure);
    gpio_bits_set(GPIOC, GPIO_PINS_15);

    crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);

    gpio_init_type gpio_init_struct;
    gpio_default_para_init(&gpio_init_struct);
    gpio_init_struct.gpio_pins = GPIO_PINS_11 | GPIO_PINS_12;
    gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
    gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
    gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL; // USB复用功能
    gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_init(GPIOA, &gpio_init_struct);

}
INIT_PORT_BSP(bsp_blue_led_init);

static void bsp_green_led_init(void){

    crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);

    gpio_init_type GPIO_InitStructure;
    GPIO_InitStructure.gpio_pins = GPIO_PINS_14;
    GPIO_InitStructure.gpio_mode = GPIO_MODE_OUTPUT;
    GPIO_InitStructure.gpio_pull = GPIO_PULL_UP;
    GPIO_InitStructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    GPIO_InitStructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;

    gpio_init(GPIOC, &GPIO_InitStructure);
    gpio_bits_set(GPIOC, GPIO_PINS_14);

}
INIT_PORT_BSP(bsp_green_led_init);

static void bsp_upgrade_btn_init(void){

    crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);

    gpio_init_type GPIO_InitStructure;
    GPIO_InitStructure.gpio_pins = GPIO_PINS_1;
    GPIO_InitStructure.gpio_mode = GPIO_MODE_INPUT;
    GPIO_InitStructure.gpio_pull = GPIO_PULL_UP;
    gpio_init(GPIOA, &GPIO_InitStructure);
}
INIT_PORT_BSP(bsp_upgrade_btn_init);

static void bsp_mode_btn_init(void){

    crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);

    gpio_init_type GPIO_InitStructure;
    GPIO_InitStructure.gpio_pins = GPIO_PINS_0;
    GPIO_InitStructure.gpio_mode = GPIO_MODE_INPUT;
    GPIO_InitStructure.gpio_pull = GPIO_PULL_UP;
    gpio_init(GPIOA, &GPIO_InitStructure);
}
INIT_PORT_BSP(bsp_mode_btn_init);

void bsp_blue_led_write(uint8_t u8Value){
    gpio_bits_write(GPIOC, GPIO_PINS_15, u8Value);
}

void bsp_green_led_write(uint8_t u8Value){
    gpio_bits_write(GPIOC, GPIO_PINS_14, u8Value);
}

uint8_t bsp_upgrade_btn_read(void){
    return gpio_input_data_bit_read(GPIOA, GPIO_PINS_1);
}

uint8_t bsp_mode_btn_read(void){
    return gpio_input_data_bit_read(GPIOA, GPIO_PINS_0);
}
